/**
 * 定义三元组为 x=z>y
 * 构造N个元素的正数数组，和为S，且恰好有k个长度为3的子段是三元组
 * 首先按212进行构造，然后根据和进行调整即可。
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using llt = long long;

template<typename T>
void input(vector<T> & v, int n){
	v.assign(n + 1, 0);
	for(int i=1;i<=n;++i) cin >> v[i];
	return;
}

vector<int> Ans;
llt N, S, K;

void proc2K(){
	Ans.emplace_back(2);
	for(int i=0;i<K;++i) {
		Ans.emplace_back(1);
		Ans.emplace_back(2);
	}	

	llt leftvalue = S - (3 * K + 2);
	llt leftpos = N - (K + K + 1);
	auto left = leftvalue - leftpos;

	if(0 == left) return;

	auto kk = K + 1;
	auto bei = left / kk;
	auto yu = left % kk;

	if(0 == bei) {Ans.clear(); return(void)(Ans.emplace_back(-1));}

	for(int i=0;i<N;i+=2) Ans[i] += bei;
	
	
	for(int i=1;i<N&&yu;i+=2,--yu) {
        Ans[i] += 1;
	}
	
	return;	
}

void proc(){
    if(0 == K){
		if(S < N) return (void)(Ans.emplace_back(-1));

		Ans.assign(N, 1);
		*(--Ans.end()) += S - N;	
		return;
	}	

	llt need = 3 * K + 2;
	if(S < 3 * K + 2) return (void)(Ans.emplace_back(-1));
	if(N < K + K + 1) return (void)(Ans.emplace_back(-1));		

	llt leftvalue = S - (3 * K + 2);
	llt leftpos = N - (K + K + 1);
	if(leftvalue < leftpos) return (void)(Ans.emplace_back(-1));

	if(N == K + K + 1) return proc2K();

	Ans.emplace_back(2);
	for(int i=0;i<K;++i) {
		Ans.emplace_back(1);
		Ans.emplace_back(2);
	}
	for(int i=K+K+1;i<N;++i)Ans.emplace_back(1);
	auto left = leftvalue - leftpos;
	*(--Ans.end()) += left;
	if(Ans.back() == 2 and N == K + K + 3) {
		swap(*--Ans.end(), *----Ans.end());
	}
    return;
}

bool check(){
	if(Ans.size() == 1 and Ans[0] == -1) return true;
	if(N != Ans.size()) return false;
	if(S != accumulate(Ans.begin(), Ans.end(), 0LL)) return false;

    for(auto i : Ans)if(i <= 0)return false;

    int k = 0;
	for(int i=2;i<N;++i){
		if(Ans[i - 2] == Ans[i] and Ans[i] > Ans[i - 1]){
			++k;
		}
	}

	if(k != K) return false;
	return true;
}

void work(){
	Ans.clear();
    cin >> N >> S >> K;

	// assert(1 <= N and N <= S and N <= 100000);
	// assert(0 <= K and K <= N - 1);
	// assert(S <= 1000000000);

	proc();

    // if(not check()) while(1);
	// if(not check()) throw runtime_error(to_string(N) + " " + to_string(S) + " " + to_string(K));
	// assert(check());

	for(auto i : Ans) cout << i << " ";
	cout << "\n";

	return;
}



int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	Ans.reserve(100000);
	int nofkase = 1;
    cin >> nofkase;
    while(nofkase--) {
		work();
	}
    return 0;
}